package com.util;

import org.apache.commons.lang3.RandomStringUtils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @author cxt
 * @date 2020/7/22
 * 批量生成20位的无重复ID，并输入tset.txt文件中
 * 注意：test.txt文件在src同级目录下
 */
public class MyUUID {

    /**
     * 大小写和数组的组合
     */
    public static String createStrId() {
        StringBuilder val = new StringBuilder();
        java.util.Random random = new java.util.Random();
        for (int i = 0; i < 32; i++) {//定义id位数
            // 输出字母还是数字
            String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
            // 字符串
            if ("char".equalsIgnoreCase(charOrNum)) {
                // 取得大写字母还是小写字母
                int choice = random.nextInt(2) % 2 == 0 ? 65 : 97;
                val.append((char) (choice + random.nextInt(26)));
            } else {
                // 数字
                val.append(String.valueOf(random.nextInt(10)));
            }
        }
        return val.toString();
    }

    /**
     * 时间开头的订单号
     * 1、时间戳精确到毫秒 + 三位随机数 （在并发高的情况下有重复数据产生）
     * 2、时间戳精确到毫秒 + 三位随机数 + 用户id
     *
     * @param userId       用户id
     * @param prefixLength 用户id固定位数，不足时候前面0代替
     * @return 返回订单号
     */
    public static String createOrderNo(Long userId, Integer prefixLength) {
        String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
        String random = RandomStringUtils.randomNumeric(3);
        String str = String.format("%0" + prefixLength + "d", userId);
        return format + random + str;
    }
}
